home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / yacas_alg / yacas_morphos / share / yacas / cstubgen.rep / code.ys < prev   
Encoding:
Text File  |  2002-03-13  |  5.7 KB  |  284 lines

  1.  
  2. /*
  3. document:
  4. - StubApiCStruct
  5. - StubApiCShortIntegerConstant(_onearg)
  6. */
  7.  
  8.  
  9. StubApiCStart():=
  10. [
  11.   cconsts := "";
  12.   cfuncs  := "";
  13.   cadders := "";
  14.   cremovers := "";
  15.   cincludes:="";
  16.   cremarks:="";
  17.   cstructs:={};
  18. ];
  19.  
  20.  
  21.  
  22. StubApiCStruct(name) := StubApiCStruct(name,"PlatFree");
  23. StubApiCStruct(name,free):=
  24. [
  25.   cremarks:=cremarks:
  26.   "----------------------------------------":Nl():
  27.   "Declared struct ":name:Nl();
  28.   cstructs[name]:=free;
  29. ];
  30.  
  31.  
  32. StubApiCRemark(text):=
  33. [
  34.   cremarks:=cremarks:text:Nl();
  35. ];
  36.  
  37. StubApiCSetEnv(string):=
  38. [
  39.   cadders := cadders: "  ":string:"(aEnvironment);
  40.   ";
  41. ];
  42.  
  43. StubApiCShortIntegerConstant(const,val) :=
  44. [
  45.   cremarks:=cremarks:
  46.   "----------------------------------------":Nl():
  47.   "Constant ":const:" referred to in the library as ":val:
  48. "
  49. ";
  50.   cconsts:= cconsts:PatchString(
  51. "  SetShortIntegerConstant(aEnvironment, <?Write(const);?>, <?WriteString(val  );?>);
  52. ");
  53. ];
  54.  
  55. /* Use this one for defines */
  56. StubApiCShortIntegerConstant(_onearg) <--
  57.   StubApiCShortIntegerConstant(onearg,onearg);
  58.  
  59.  
  60.  
  61. StubApiCInclude(file):=
  62. [
  63. cincludes:=cincludes : "#include ":file:"
  64. ";
  65. ];
  66.  
  67. CArgsGet(args_IsList) <--
  68. [
  69.   Local(arg,i);
  70.   i:=1;
  71.   ForEach(arg,args)
  72.   [
  73.     CArgsGet(CArgType(arg),i);
  74.     i++;
  75.   ];
  76. ];
  77.  
  78. 10 # CArgType(arg_IsList)<-- arg[1];
  79. 20 # CArgType(arg_IsString)<-- arg;
  80.  
  81. 10 # CArgName(arg_IsList,_i)_(Length(arg)>1) <-- arg[2];
  82. 20 # CArgName(_arg,_i) <-- "arg":String(i);
  83.  
  84. 20 # CArgsGet("int",_i) <--
  85. [
  86.  
  87.  
  88.  WriteString(PatchString(
  89. "  ShortIntegerArgument(g, <? WriteString(\"arg\":String(i)); ?>, LispTrue);
  90. "));
  91. ];
  92.  
  93.  
  94. 20 # CArgsGet("double",_i) <--
  95. [
  96.  WriteString(PatchString(
  97. "  DoubleFloatArgument(g,<? WriteString(\"arg\":String(i)); ?>,LispTrue);
  98. "));
  99. ];
  100.  
  101. 20 # CArgsGet("input_string",_i) <--
  102. [
  103.  WriteString(PatchString(
  104. "  InpStringArgument(g,<? WriteString(\"arg\":String(i)); ?>,LispTrue);
  105. "));
  106. ];
  107.  
  108. 30 # CArgsGet(name_IsString,_i)_(cstructs[name] != Empty) <--
  109. [
  110.  WriteString(PatchString(
  111. "  VoidStructArgument(<?WriteString(name);?>,g,<? WriteString(\"arg\":String(i)); ?>,LispTrue,<?Write(name);?>);
  112. "));
  113. ];
  114.  
  115.  
  116.  
  117.  
  118. 100 # CArgsGet(_a,_i) <-- Check(False,"Argument type ":a:" not supported");
  119.  
  120. CCall(returntype,fname,args):=
  121. [
  122.  WriteString(fname);
  123.  WriteString("(");
  124.  Local(i);
  125.  For (i:=1,i<=Length(args),i++)
  126.      [
  127.       If(i>1,WriteString(", "));
  128.      WriteString("arg":String(i));
  129.      ];
  130.  WriteString(");");
  131. ];
  132.  
  133. 10  # CReturnResult("void") <--
  134.     WriteString("  InternalTrue(aEnvironment,aResult);");
  135.  
  136. 10  # CReturnResult("int") <--
  137.     WriteString("  ReturnShortInteger(aEnvironment,aResult,r);");
  138. 10  # CReturnResult("double") <--
  139.     WriteString("  ReturnDoubleFloat(aEnvironment,aResult,r);");
  140.  
  141. 20  # CReturnResult(name_IsString)_(cstructs[name] != Empty)<--
  142.  
  143.     WriteString("  ReturnVoidStruct(aEnvironment, aResult,":String(name):", r,":cstructs[name]:");");
  144.  
  145. 100 # CReturnResult(_r) <-- Check(False,"Return type ":r:" not supported");
  146.  
  147.  
  148. 10  # CCallContain("void") <-- True;
  149. 10  # CCallContain("int") <-- WriteString("int r = ");
  150. 10  # CCallContain("double") <-- WriteString("double r = ");
  151.  
  152. 20  # CCallContain(name_IsString)_(cstructs[name] != Empty)<--
  153.       WriteString("void* r = ");
  154. 100 # CCallContain(_r) <-- Check(False,"Return type ":r:" not supported");
  155.  
  156.  
  157.  
  158. funcstring:=
  159. "
  160. static void base_<? WriteString(fname); ?>(LispEnvironment& aEnvironment, LispPtr& aResult,
  161.                            LispPtr& aArguments)
  162. {
  163.   /* Obtain arguments passed in. */
  164.   LispArgGetter g(aEnvironment, aArguments);
  165. <?
  166. CArgsGet(args);
  167. ?>  g.Finalize(<?Write(Length(args));?>);
  168.  
  169.   /* Call the actual function. */
  170. <?CCallContain(returntype);?> <?CCall(returntype,fname,args); ?>
  171.  
  172. /* Return result. */
  173. <?
  174. CReturnResult(returntype);
  175. ?>
  176. }
  177. ";
  178.  
  179.  
  180. cadderstring:=
  181. "  aEnvironment.SetCommand(base_<? WriteString(fname); ?>, <? Write(fname2); ?>);
  182. ";
  183.  
  184. cremoverstring:=
  185. "  aEnvironment.RemoveCommand(<? Write(fname2); ?>);
  186. ";
  187.  
  188.  
  189. fileapi:=
  190. "
  191. /* This file was automatically generated with cstubgen.
  192. */
  193. #include \"lisptype.h\"
  194. #include \"lispenvironment.h\"
  195. #include \"lispatom.h\"
  196. #include \"standard.h\"
  197. #include \"arggetter.h\"
  198. #include \"lispplugin.h\"
  199. #include \"platmath.h\"
  200. #include \"stubs.h\"
  201. #include \"genericstructs.h\"
  202.  
  203. <?
  204. WriteString(cincludes);
  205. ?>
  206. <?
  207. WriteString(cfuncs);
  208. ?> 
  209.  
  210.  
  211. class ThisPlugin : public LispPluginBase
  212. {
  213. public:
  214.     virtual void Add(LispEnvironment& aEnvironment);
  215.     virtual void Remove(LispEnvironment& aEnvironment);
  216. };
  217. void ThisPlugin::Add(LispEnvironment& aEnvironment)
  218. {
  219. <?
  220. WriteString(cconsts);
  221. ?>
  222. <?
  223. WriteString(cadders);
  224. ?>}
  225.  
  226. void ThisPlugin::Remove(LispEnvironment& aEnvironment)
  227. {
  228. //printf(\"CLOSED DLL!!!\\n\");
  229. <?
  230. WriteString(cremovers);
  231. ?>}
  232.  
  233. extern \"C\" {
  234. LispPluginBase* maker(void)
  235. {
  236.     return new ThisPlugin;
  237. }
  238.  
  239. };
  240.  
  241. ";
  242.  
  243. StubApiCDocumentFunction(returntype,fname,fname2,args):=
  244. [
  245.   cremarks:=cremarks:
  246.   "----------------------------------------":Nl():
  247.   "Function ":fname2:Nl():" (referred to within the original library as ":fname:
  248.   ")":Nl():" with return type ":CArgType(returntype):" and arguments:
  249. ";
  250.   Local(arg,i);
  251.   i:=1;
  252.   ForEach(arg,args)
  253.   [
  254.     cremarks:=cremarks:String(i):". ":CArgType(arg):" ":CArgName(arg,i):Nl();
  255.     i++;
  256.   ];
  257.  
  258. ];
  259.  
  260. StubApiCFunction(returntype,fname,args) :=
  261. [
  262.   Local(fname2);
  263.   cfuncs:= cfuncs:PatchString(funcstring);
  264.   fname2:=fname;
  265.   cadders:=cadders:PatchString(cadderstring);
  266.   cremovers:=cremovers:PatchString(cremoverstring);
  267.   StubApiCDocumentFunction(returntype,fname,fname2,args);
  268. ];
  269.  
  270. StubApiCFunction(returntype,fname,fname2,args) :=
  271. [
  272.   cfuncs:= cfuncs:PatchString(funcstring);
  273.   cadders:=cadders:PatchString(cadderstring);
  274.   cremovers:=cremovers:PatchString(cremoverstring);
  275.   StubApiCDocumentFunction(returntype,fname,fname2,args);
  276. ];
  277.  
  278.  
  279. StubApiCFile(file):=
  280. [
  281.   ToFile(file:".cc")WriteString(PatchString(fileapi));
  282.   ToFile(file:".description")WriteString(cremarks);
  283. ];
  284.